package com.itheima.mapper;


import com.itheima.annotation.AutoFill;
import com.itheima.dto.PageUser;
import com.itheima.entity.Menu;
import com.itheima.entity.SysUser;
import com.itheima.enumeration.OperationDateType;
import com.itheima.result.PageData;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;


@Mapper
public interface SysUserMapper {

    /**
     * 选择用户
     *
     * @param login_name 登录名
     * @return {@link SysUser}
     */
    @Select("select * from sys_user where login_name=#{login_name}")
    SysUser selectUser(String login_name);

    /**
     * 更新系统用户
     *
     * @param user 用户
     */
    @AutoFill(OperationDateType.UPDATE)
    void updateSysUser(SysUser user);

    /**
     * 按id选择用户
     *
     * @param loginUserId 登录用户id
     * @return {@link SysUser}
     */
    @Select("select id, login_name, password, name, email, phone, login_ip, login_date, create_date, update_date, del_flag, role_id, status, default_data from sys_user where id=#{loginUserId}")
    SysUser selectUserById(String loginUserId);

    /**
     * 按id选择角色名称
     *
     * @param roleIdsJavaList 角色标识java列表
     * @return {@link List}<{@link String}>
     */
    List<String> selectRoleNameByIds(List<String> roleIdsJavaList);

    /**
     * 按角色id选择菜单
     *
     * @param role_id 角色id
     * @return {@link List}<{@link Menu}>
     */
    List<Menu> selectMenusByRoleIds(List<String> role_id);


    /**
     * 获取所有用户
     *
     * @param login_name 登录名
     * @param status     状态
     * @param phone      电话
     * @return {@link List}<{@link SysUser}>
     */
    List<SysUser> getAllUser(String loginName, Integer status, String phone);

    /**
     * 创建用户
     *
     * @param sysUser 系统用户
     */
    @AutoFill(OperationDateType.INSERT)
    void creatUser(SysUser sysUser);

    /**
     * 删除用户
     *
     * @param id id
     */
    void deleteUser(String id);

    /**
     * 更新用户
     *
     * @param sysUser 系统用户
     */
    @AutoFill(OperationDateType.UPDATE)
    void updateUser(SysUser sysUser);
}


